/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.entidad.modelo;

import bs.global.modelo.Auditoria;
import bs.global.modelo.CodigoPostal;
import bs.global.modelo.CondicionDeIva;
import bs.global.modelo.Provincia;
import bs.global.modelo.TipoDocumento;
import bs.global.modelo.Zona;
import bs.ventas.modelo.Cobrador;
import bs.ventas.modelo.CondicionDePagoVenta;
import bs.ventas.modelo.LimiteDeCreditoVenta;
import bs.ventas.modelo.ListaDePrecio;
import bs.ventas.modelo.Vendedor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @author Claudio
 */
@Entity
@Table(name = "en_entidad")
public class EntidadComercial implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "NROCTA", nullable = false, length = 13)
    private String nrocta;    
    @Basic(optional = false)
    
    @Column(name = "NROSUB", length = 13)
    private String nrosub;
    
    @Column(name = "RAZONS", nullable = false, length = 120)
    private String razonSocial;
    
    @Column(name = "FNTSIA", length = 120)
    private String nombreFantasia;
    
    // Dirección fiscal
    @Column(name = "DIRECC", length = 60)
    private String direccion;
    @Column(name = "NUMERO", length = 6)
    private String numero;
    @Column(name = "DPPISO", length = 6)
    private String departamentoPiso;
    @Column(name = "DEPTOS", length = 6)
    private String departamentoNumero;    
    @Column(name = "BARRIO", length = 6)
    private String barrio;
        
    @JoinColumns({
        @JoinColumn(name = "CODPRO", referencedColumnName = "CODIGO", nullable = false),
        @JoinColumn(name = "CODPAI", referencedColumnName = "CODPAI", nullable = false)
    })
    @ManyToOne(fetch = FetchType.LAZY)
    private Provincia provincia;
    
    @JoinColumn(name = "CODPOS", referencedColumnName = "ID", nullable = false)        
    @ManyToOne(fetch = FetchType.LAZY)
    private CodigoPostal codigoPostal;
    
    @Column(name = "TELEFN", length = 30)
    private String telefono;
    @Column(name = "NROFAX", length = 20)
    private String nrofax;
    @Column(name = "NTELEX", length = 15)
    private String ntelex;
    
    @JoinColumn(name = "CODZON", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Zona zona;
    
    @JoinColumn(name = "CODEST", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private EstadoEntidad estado;
    
    @Column(name = "CODTIP")
    private Integer tipo;
    
    @JoinColumns({
        @JoinColumn(name = "CODCAT", referencedColumnName = "CODIGO", nullable = false),
        @JoinColumn(name = "CODTIP", referencedColumnName = "CODTIP", nullable = false, insertable = false, updatable = false)
    })
    @ManyToOne(fetch = FetchType.LAZY)
    private Categoria categoria;
    
    @JoinColumn(name = "CNDIVA", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private CondicionDeIva condicionDeIva;
    
    @JoinColumn(name = "TIPDOC", referencedColumnName = "CODIGO", nullable = false)    
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDocumento tipoDocumento;
    
    @JoinColumn(name = "TIPDO1", referencedColumnName = "CODIGO", nullable = false)    
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDocumento tipoDocumento1;
    
    @JoinColumn(name = "TIPDO2", referencedColumnName = "CODIGO", nullable = false)    
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDocumento tipoDocumento2;
    
    @JoinColumn(name = "TIPDO3", referencedColumnName = "CODIGO", nullable = false)    
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoDocumento tipoDocumento3;
   
    @Column(name = "NRODOC", length = 50)
    private String nrodoc;
    
    @Column(name = "NRODO1", length = 50)
    private String nrodo1;
    
    @Column(name = "NRODO2", length = 50)
    private String nrodo2;
    
    @Column(name = "NRODO3", length = 50)
    private String nrodo3;

    @JoinColumn(name = "VNDDOR", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Vendedor vendedor;
    
    @JoinColumn(name = "COBRAD", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Cobrador cobrador;
   
    @JoinColumn(name = "CNDPVT", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private CondicionDePagoVenta condicionDePagoVentas;

    @JoinColumn(name = "CODLIS", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private ListaDePrecio listaDePrecioVenta;

    @JoinColumn(name = "CODLCV", referencedColumnName = "CODIGO", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private LimiteDeCreditoVenta limiteDeCreditoVenta;
     
    @Lob
    @Column(name = "NOTAS", length = 2147483647)
    private String notas;

    @Column(name = "DIREML", length = 60)
    private String email;
        
    @Column(name = "CONTAD", length = 1)
    private String soloContado;
    
    @Column(name = "INHIBE", length = 1)
    private String inhibidoParaFacturacion;        
    @Column(name = "LATTUD", precision = 15, scale = 4)
    private BigDecimal coordenadaLatitud;
    @Column(name = "LONTUD", precision = 15, scale = 4)
    private BigDecimal coordenadaLongitud;    
    @Column(name = "ULTCON")
    @Temporal(TemporalType.DATE)
    private Date ultimaConsultaAFIP;    
    @Column(name = "TIPING", length = 2)
    private String tipoIngresosBrutos;    
    @Embedded
    private Auditoria auditoria;
       
    @OneToMany(mappedBy = "entidad", fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    private List<DireccionEntregaEntidad> direccionesDeEntrega;

    public EntidadComercial() {
    }

    public EntidadComercial(String nrocta) {
        this.nrocta = nrocta;
    }

    public String getNrocta() {
        return nrocta;
    }

    public void setNrocta(String nrocta) {
        this.nrocta = nrocta;
    }

    public String getNrosub() {
        return nrosub;
    }

    public void setNrosub(String nrosub) {
        this.nrosub = nrosub;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getNombreFantasia() {
        return nombreFantasia;
    }

    public void setNombreFantasia(String nombreFantasia) {
        this.nombreFantasia = nombreFantasia;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getDepartamentoPiso() {
        return departamentoPiso;
    }

    public void setDepartamentoPiso(String departamentoPiso) {
        this.departamentoPiso = departamentoPiso;
    }

    public String getDepartamentoNumero() {
        return departamentoNumero;
    }

    public void setDepartamentoNumero(String departamentoNumero) {
        this.departamentoNumero = departamentoNumero;
    }

    public String getBarrio() {
        return barrio;
    }

    public void setBarrio(String barrio) {
        this.barrio = barrio;
    }

    public Provincia getProvincia() {
        return provincia;
    }

    public void setProvincia(Provincia provincia) {
        this.provincia = provincia;
    }
    
    public CodigoPostal getCodigoPostal() {
        return codigoPostal;
    }

    public void setCodigoPostal(CodigoPostal codigoPostal) {
        this.codigoPostal = codigoPostal;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getNrofax() {
        return nrofax;
    }

    public void setNrofax(String nrofax) {
        this.nrofax = nrofax;
    }

    public String getNtelex() {
        return ntelex;
    }

    public void setNtelex(String ntelex) {
        this.ntelex = ntelex;
    }

    public Integer getTipo() {
        return tipo;
    }

    public void setTipo(Integer tipo) {
        this.tipo = tipo;
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        this.categoria = categoria;
    }

    public CondicionDeIva getCondicionDeIva() {
        return condicionDeIva;
    }

    public void setCondicionDeIva(CondicionDeIva condicionDeIva) {
        this.condicionDeIva = condicionDeIva;
    }

    public TipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(TipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public TipoDocumento getTipoDocumento1() {
        return tipoDocumento1;
    }

    public void setTipoDocumento1(TipoDocumento tipoDocumento1) {
        this.tipoDocumento1 = tipoDocumento1;
    }

    public TipoDocumento getTipoDocumento2() {
        return tipoDocumento2;
    }

    public void setTipoDocumento2(TipoDocumento tipoDocumento2) {
        this.tipoDocumento2 = tipoDocumento2;
    }

    public TipoDocumento getTipoDocumento3() {
        return tipoDocumento3;
    }

    public void setTipoDocumento3(TipoDocumento tipoDocumento3) {
        this.tipoDocumento3 = tipoDocumento3;
    }

    public String getNrodoc() {
        return nrodoc;
    }

    public void setNrodoc(String nrodoc) {
        this.nrodoc = nrodoc;
    }

    public String getNrodo1() {
        return nrodo1;
    }

    public void setNrodo1(String nrodo1) {
        this.nrodo1 = nrodo1;
    }

    public String getNrodo2() {
        return nrodo2;
    }

    public void setNrodo2(String nrodo2) {
        this.nrodo2 = nrodo2;
    }

    public String getNrodo3() {
        return nrodo3;
    }

    public void setNrodo3(String nrodo3) {
        this.nrodo3 = nrodo3;
    }

    public Vendedor getVendedor() {
        return vendedor;
    }

    public void setVendedor(Vendedor vendedor) {
        this.vendedor = vendedor;
    }

    public Cobrador getCobrador() {
        return cobrador;
    }

    public void setCobrador(Cobrador cobrador) {
        this.cobrador = cobrador;
    }

    public CondicionDePagoVenta getCondicionDePagoVentas() {
        return condicionDePagoVentas;
    }

    public void setCondicionDePagoVentas(CondicionDePagoVenta condicionDePagoVentas) {
        this.condicionDePagoVentas = condicionDePagoVentas;
    }

    public ListaDePrecio getListaDePrecioVenta() {
        return listaDePrecioVenta;
    }

    public void setListaDePrecioVenta(ListaDePrecio listaDePrecioVenta) {
        this.listaDePrecioVenta = listaDePrecioVenta;
    }

    public LimiteDeCreditoVenta getLimiteDeCreditoVenta() {
        return limiteDeCreditoVenta;
    }

    public void setLimiteDeCreditoVenta(LimiteDeCreditoVenta limiteDeCreditoVenta) {
        this.limiteDeCreditoVenta = limiteDeCreditoVenta;
    }

    public String getNotas() {
        return notas;
    }

    public void setNotas(String notas) {
        this.notas = notas;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String direccionemail) {
        this.email = direccionemail;
    }

    public String getSoloContado() {
        return soloContado;
    }

    public void setSoloContado(String soloContado) {
        this.soloContado = soloContado;
    }

    public String getInhibidoParaFacturacion() {
        return inhibidoParaFacturacion;
    }

    public void setInhibidoParaFacturacion(String inhibidoParaFacturacion) {
        this.inhibidoParaFacturacion = inhibidoParaFacturacion;
    }

    public EstadoEntidad getEstado() {
        return estado;
    }

    public void setEstado(EstadoEntidad estado) {
        this.estado = estado;
    }
    
    public BigDecimal getCoordenadaLatitud() {
        return coordenadaLatitud;
    }

    public void setCoordenadaLatitud(BigDecimal coordenadaLatitud) {
        this.coordenadaLatitud = coordenadaLatitud;
    }

    public BigDecimal getCoordenadaLongitud() {
        return coordenadaLongitud;
    }

    public void setCoordenadaLongitud(BigDecimal coordenadaLongitud) {
        this.coordenadaLongitud = coordenadaLongitud;
    }

    public Date getUltimaConsultaAFIP() {
        return ultimaConsultaAFIP;
    }

    public void setUltimaConsultaAFIP(Date ultimaConsultaAFIP) {
        this.ultimaConsultaAFIP = ultimaConsultaAFIP;
    }

    public String getTipoIngresosBrutos() {
        return tipoIngresosBrutos;
    }

    public void setTipoIngresosBrutos(String tipoIngresosBrutos) {
        this.tipoIngresosBrutos = tipoIngresosBrutos;
    }

    public Auditoria getAuditoria() {
        return auditoria;
    }

    public void setAuditoria(Auditoria auditoria) {
        this.auditoria = auditoria;
    }

    public List<DireccionEntregaEntidad> getDireccionesDeEntrega() {
        return direccionesDeEntrega;
    }

    public void setDireccionesDeEntrega(List<DireccionEntregaEntidad> direccionesDeEntrega) {
        this.direccionesDeEntrega = direccionesDeEntrega;
    }

    public Zona getZona() {
        return zona;
    }

    public void setZona(Zona zona) {
        this.zona = zona;
    }
    
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 59 * hash + (this.nrocta != null ? this.nrocta.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final EntidadComercial other = (EntidadComercial) obj;
        if ((this.nrocta == null) ? (other.nrocta != null) : !this.nrocta.equals(other.nrocta)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "EntidadComercial{" + "nrocta=" + nrocta + '}';
    }
}
